package com.cruise.game.service.game;

import com.cruise.game.model.param.game.GameServiceCreateParam;
import com.cruise.game.model.param.game.GameServiceQueryParam;
import com.cruise.game.model.param.game.GameServiceUpdateParam;
import com.cruise.game.model.vo.common.PageResult;
import com.cruise.game.model.vo.game.GameServiceListVO;
import com.cruise.game.model.vo.game.GameServiceVO;

import java.util.List;

/**
 * 游戏服务服务接口
 * 
 * @author cruise
 * @date 2025-02-28
 */
public interface ServiceService {

    /**
     * 获取游戏服务列表
     *
     * @param param 查询参数
     * @return 游戏服务列表
     */
    PageResult<GameServiceListVO> getServiceList(GameServiceQueryParam param);

    /**
     * 获取游戏服务详情
     *
     * @param serviceId 服务ID
     * @return 游戏服务详情
     */
    GameServiceVO getServiceDetail(Long serviceId);

    /**
     * 搜索游戏服务
     *
     * @param keyword  关键词
     * @param page     页码
     * @param pageSize 每页条数
     * @return 游戏服务列表
     */
    PageResult<GameServiceListVO> searchServices(String keyword, Integer page, Integer pageSize);

    /**
     * 获取热门游戏服务列表
     *
     * @param limit 限制数量
     * @return 热门游戏服务列表
     */
    List<GameServiceListVO> getHotServiceList(Integer limit);

    /**
     * 获取推荐游戏服务列表
     *
     * @param limit 限制数量
     * @return 推荐游戏服务列表
     */
    List<GameServiceListVO> getRecommendedServiceList(Integer limit);

    /**
     * 创建游戏服务
     *
     * @param param   创建参数
     * @param agentId 代理ID
     * @return 服务ID
     */
    Long createService(GameServiceCreateParam param, Long agentId);

    /**
     * 更新游戏服务
     *
     * @param serviceId 服务ID
     * @param param     更新参数
     * @param agentId   代理ID
     * @return 是否成功
     */
    boolean updateService(Long serviceId, GameServiceUpdateParam param, Long agentId);

    /**
     * 删除游戏服务
     *
     * @param serviceId 服务ID
     * @param agentId   代理ID
     * @return 是否成功
     */
    boolean deleteService(Long serviceId, Long agentId);

    /**
     * 更新游戏服务状态
     *
     * @param serviceId 服务ID
     * @param status    状态
     * @param agentId   代理ID
     * @return 是否成功
     */
    boolean updateServiceStatus(Long serviceId, String status, Long agentId);

    /**
     * 管理员更新游戏服务状态
     *
     * @param serviceId 服务ID
     * @param status    状态
     * @return 是否成功
     */
    boolean adminUpdateServiceStatus(Long serviceId, String status);

    /**
     * 管理员设置热门游戏服务
     *
     * @param serviceId 服务ID
     * @param isHot     是否热门
     * @return 是否成功
     */
    boolean adminSetHotService(Long serviceId, Boolean isHot);

    /**
     * 管理员设置推荐游戏服务
     *
     * @param serviceId     服务ID
     * @param isRecommended 是否推荐
     * @return 是否成功
     */
    boolean adminSetRecommendedService(Long serviceId, Boolean isRecommended);

    /**
     * 管理员删除游戏服务
     *
     * @param serviceId 服务ID
     * @return 是否成功
     */
    boolean adminDeleteService(Long serviceId);
}
